<?php

/**
 * HybridAuth
 * http://hybridauth.sourceforge.net | http://github.com/hybridauth/hybridauth
 * (c) 2009-2015, HybridAuth authors | http://hybridauth.sourceforge.net/licenses.html
 */

/**
 * Debugging and Logging manager
 */
class Hybrid_Logger {

	/**
	 * Constructor
	 */
	function __construct() {
		// if debug mode is set to true, then check for the writable log file
		if (Hybrid_Auth::$config["debug_mode"]) {
			if (!isset(Hybrid_Auth::$config["debug_file"])) {
				throw new Exception("'debug_mode' is set to 'true' but no log file path 'debug_file' is set.", 1);
			} elseif (!file_exists(Hybrid_Auth::$config["debug_file"]) && !is_writable(Hybrid_Auth::$config["debug_file"])) {
				if (!touch(Hybrid_Auth::$config["debug_file"])) {
					throw new Exception("'debug_mode' is set to 'true', but the file " . Hybrid_Auth::$config['debug_file'] . " in 'debug_file' can not be created.", 1);
				}
			} elseif (!is_writable(Hybrid_Auth::$config["debug_file"])) {
				throw new Exception("'debug_mode' is set to 'true', but the given log file path 'debug_file' is not a writable file.", 1);
			}
		}
	}

	/**
	 * Logs a debug message with an object dump
	 *
	 * @param string   $message Debug message
	 * @param stdClass $object  Object being debugged
	 * @return void
	 */
	public static function debug($message, $object = null) {
		if (Hybrid_Auth::$config["debug_mode"] === true) {
      $dt = new DateTime('now', new DateTimeZone( 'UTC' ));
			file_put_contents(Hybrid_Auth::$config["debug_file"], implode(' -- ', array(
				"DEBUG",
				$_SERVER['REMOTE_ADDR'],
				$dt->format(DATE_ATOM),
				$message,
				print_r($object, true) . PHP_EOL,
					)), FILE_APPEND
			);
		}
	}

	/**
	 * Logs an info message
	 *
	 * @param string $message Info message
	 * @return void
	 */
	public static function info($message) {
		if (in_array(Hybrid_Auth::$config["debug_mode"], array(true, 'info'), true)) {
      $dt = new DateTime('now', new DateTimeZone( 'UTC' ));
			file_put_contents(Hybrid_Auth::$config["debug_file"], implode(' -- ', array(
				"INFO",
				$_SERVER['REMOTE_ADDR'],
				$dt->format(DATE_ATOM),
				$message . PHP_EOL,
					)), FILE_APPEND);
		}
	}

	/**
	 * Logs an error message with an object dump
	 *
	 * @param string   $message Error message
	 * @param stdClass $object  Object being debugged
	 * @return void
	 */
	public static function error($message, $object = null) {
		if (isset(Hybrid_Auth::$config["debug_mode"]) && in_array(Hybrid_Auth::$config["debug_mode"], array(true, 'info', 'error'), true)) {
      $dt = new DateTime('now', new DateTimeZone( 'UTC' ));
			file_put_contents(Hybrid_Auth::$config["debug_file"], implode(' -- ', array(
				'ERROR',
				$_SERVER['REMOTE_ADDR'],
				$dt->format(DATE_ATOM),
				$message,
				print_r($object, true) . PHP_EOL
					)), FILE_APPEND);
		}
	}

    /**
     * Dumps the data in the way suitable to be output in log files for debug purposes
     *
     * @param mixed $data
     *
     * @return string
     */
    public static function dumpData($data) {
		return var_export($data, true);
	}

}
